cmake_minimum_required(VERSION 3.5)

project(qtimagecommpress VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(jpeg_lib "${CMAKE_CURRENT_SOURCE_DIR}/lib/jpeg.lib")
set(libpng_lib "C:/Users/20021/Desktop/vcpkg/packages/libpng_x64-windows/lib/libpng16.lib")
set(zlib_lib "C:/Users/20021/Desktop/vcpkg/packages/zlib_x64-windows/lib/zlib.lib")
set(src_dir ${CMAKE_CURRENT_SOURCE_DIR}/src)

# 添加预处理器定义
add_definitions(
  -DWIN32
  -D_WINDOWS
  -DBMP_SUPPORTED
  -DGIF_SUPPORTED
  -DPPM_SUPPORTED
  -DTARGA_SUPPORTED
  -DUSE_SETMODE
  -DPNG_SUPPORTED
  -D_CRT_NONSTDC_NO_WARNINGS
)
if(WITH_SIMD AND(MSVC_IDE OR XCODE))
  # This tells CMake that the "source" files haven't been generated yet
  set_source_files_properties(${SIMD_OBJS} PROPERTIES GENERATED 1)
endif()

if(WIN32)
  set(USE_SETMODE "-DUSE_SETMODE")
endif()

if(WITH_12BIT)
  set(COMPILE_FLAGS "-DGIF_SUPPORTED -DPPM_SUPPORTED ${USE_SETMODE}")
else()
  set(COMPILE_FLAGS "-DBMP_SUPPORTED -DGIF_SUPPORTED -DPPM_SUPPORTED -DTARGA_SUPPORTED ${USE_SETMODE}")
  set(CJPEG_BMP_SOURCES rdbmp.c rdtarga.c)

  if(PNG_SUPPORTED)
    report_option(PNG_SUPPORTED "PNG reading support")
    set(COMPILE_FLAGS "${COMPILE_FLAGS} -DPNG_SUPPORTED")
    set(CJPEG_BMP_SOURCES ${CJPEG_BMP_SOURCES} rdpng.c)
  endif()
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(qtimagecommpress
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET qtimagecommpress APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(qtimagecommpress SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(qtimagecommpress
            ${PROJECT_SOURCES}
            cdjpeg.c
            # cjpeg.c
            rdbmp.c rdgif.c rdjpeg.c rdpng.cpp rdppm.c rdswitch.c rdtarga.c
            cdjpeg.h   png.h pngconf.h pnglibconf.h

        )
    endif()
endif()

set_property(TARGET qtimagecommpress PROPERTY COMPILE_FLAGS ${COMPILE_FLAGS})

target_link_libraries(qtimagecommpress PUBLIC ${jpeg_lib} ${zlib_lib} ${libpng_lib})

target_include_directories(qtimagecommpress PUBLIC
  "C:/Code/mozjpeg-4.1.5/build"
  "C:/Code/mozjpeg-4.1.5"
  "C:/Users/20021/Desktop/vcpkg/packages/libpng_x64-windows/include"
  "C:/Users/20021/Desktop/vcpkg/packages/zlib_x64-windows/include"
  "C:/Users/20021/Desktop/vcpkg/packages/libpng_x64-windows/include"
)

if(PNG_SUPPORTED)
  # to avoid finding static library from CMake cache
  unset(PNG_LIBRARY CACHE)
  unset(PNG_LIBRARY_RELEASE CACHE)
  unset(PNG_LIBRARY_DEBUG CACHE)
  unset(ZLIB_LIBRARY CACHE)
  unset(ZLIB_LIBRARY_RELEASE CACHE)
  unset(ZLIB_LIBRARY_DEBUG CACHE)
  set(CMAKE_PREFIX_PATH "C:/Users/20021/Desktop/vcpkg/packages/libpng_x64-windows;C:/Users/20021/Desktop/vcpkg/packages/zlib_x64-windows;C:/Users/20021/Desktop/vcpkg/packages/libpng_x64-windows/bin;C:/Users/20021/Desktop/vcpkg/packages/zlib_x64-windows/bin")
  find_package(PNG 1.6 REQUIRED)
  find_package(ZLIB REQUIRED)
  target_include_directories(cjpeg PUBLIC ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
  target_link_libraries(cjpeg ${PNG_LIBRARY} ${ZLIB_LIBRARY})
endif()

target_link_libraries(qtimagecommpress PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.qtimagecommpress)
endif()
set_target_properties(qtimagecommpress PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS qtimagecommpress
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(qtimagecommpress)
endif()
